/**
 * 一辆卡车违反交规，撞人后逃跑。现在有三人目击事件，但都没记住车牌号，只记下
 * 车牌号的一些特征。甲说：车号的前两位数字是相同的；乙说：车号的后两位是相同
 * 的，但与前两位不同；丙是数学家，他说：四位的车号刚好是一个整数的平方。请跟
 * 据以上线索找出车号。
 */
#include <stdio.h>

int main()
{
	/**
	 * 解题思路：找规律，列条件，循环出结果。
	 * 注意：尽量避免嵌套循环，尤其是三层以上（包括三层）
	 */
	int t1 = 0;
	int t2 = 0;
	/**
	 * 这种解法虽然也能得出结果，但用了三层循环，循环次数太多，没有第二种解法
	 * 好。
	 * 以后应尽量避免嵌套循环
	 */
	for (int i=0; i<10; i++) {
		for (int j=0; j<10; j++) {
			for (int k=32; k<100; k++) {
				t1++;
				if (i != j) {
					if (i*1000 + i*100 + j*10 + j == k * k) {
						printf("value=%d times=%d\n", k*k, t1);	
						break;
					}
				}
			}
		}
	}
	// output: value=7744 times=5089

	/**
	 * 这二种解法。
	 */
	for (int k=32; k<100; k++) {
		t2++;
		int a = k*k/1000;
		int b = k*k/100%10;
		int c = k*k/10%10;
		int d = k*k%10;
		if (a == b && c == d && a != c) {
			printf("value=%d times=%d\n", k*k, t2);	
			break;
		}
	}

	// output: value=7744 times=57
	return 0;
}
